package com.hust.ele.controller;

import java.util.Date;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import com.hust.ele.bean.Test;
import com.hust.ele.cache.TestCache;

/**
 * @description 测试类Cache的Controller
 * @author 周杨
 * @Time 2018年10月24日 下午8:24:01
 */
@RestController
@RequestMapping("/cache")
public class CacheController {
	
	@Autowired
	TestCache cache;
	
	@RequestMapping(value = "/find", method = RequestMethod.GET)
	public Test get(@RequestParam int id) {
		return cache.findById(id);
	}
	
	/**
	 * @description 为了保证数据库和缓存的双写一致 我们必须从缓存中拿到数据bean 再去设置这个bean到数据库里
	 * 如果要用并发处理 那么请用request.thread实现 或者消息队列缓冲
	 * @author 周杨
	 */
	@RequestMapping(value = "/save/{id}/{name}")
	public Test save(@PathVariable int id, @PathVariable String name) {
		Test test = this.cache.findById(id);// 先从缓存里拿
		if(test==null){//缓存里没有这个数据 并且数据库里也查不到 那么说明主键不对 主键不对没有必要对缓存进行任何修改
			return null;
		}
		test.setDate(new Date());
		test.setName(name);
		return this.cache.updateTest(test);//再去数据库里修改 并重建缓存
	}
	
	@RequestMapping(value = "/delete/{id}")
	public String delete(@PathVariable int id) {
		return cache.deleteById(id);
	}
	
	@RequestMapping(value="/listFindByNameLike/{name}")
	public List<Test> listFindByNameLike(@PathVariable String name){
		return this.cache.listFindByNameLike(name);
	}
	

}
